﻿{
var ua = navigator.userAgent;
var $IE = (navigator.appName == "Microsoft Internet Explorer");
var $IE5 = $IE && (ua.indexOf('MSIE 5') != -1);
var $IE5_0 = $IE && (ua.indexOf('MSIE 5.0') != -1);
var $Gecko = ua.indexOf('Gecko') != -1;
var $Safari = ua.indexOf('Safari') != -1;
var $Opera = ua.indexOf('Opera') != -1;
var $Mac = ua.indexOf('Mac') != -1;
var $NS7 = ua.indexOf('Netscape/7') != -1;
var $NS71 = ua.indexOf('Netscape/7.1') != -1;

if ($Opera) {
   $IE = true;
   $Gecko = false;
   $Safari = false;
}
if ($IE5) {
         $IE = true;


         $Gecko = false;
         $Safari = false;
}
}
function $_t(root,tag,id){
var ar=root.getElementsByTagName(tag);
for (var i=0;i<ar.length;i++){
   if (ar[i].id==id) return ar[i];
}
return null;
}
function _(root){

var ids=arguments;
var i0=0;

if (typeof(root) == 'string') root = document;
else i0=1;

for (var i=i0;i<ids.length;i++){
   var s=root.getElementsByTagName("*");

   var has=false;
   for (var j=0;j<s.length;j++){
    if (s[j].id==ids[i]){
     root=s[j];
     has=true;
     break;
    }
   }
   if (!has) return null;
}
return root;
}
//util


function $dele(o,fn,rv){

var r = function (){

   var s=arguments.callee;

   var args = [];
   for (var i=0;i<s.length;i++) args[i]=s[i];
   var argStr = args.join(",");
   if (argStr.length > 0) argStr=","+argStr;

   var callStr="s.thiz[s.fn]("+argStr+")";
   var v=eval(callStr);


   if (s.rv!=null) {
    return s.rv;
   } else {
    return v;
   }
}

r.thiz=o;
r.fn=fn;
r.rv=rv;

return r;
}

function $ge(e){
if (e!=null) return e;
if ($IE) {
   return window.event;
} else return e;
}


/**
* get event for a element;
*/
function $gte(e,ev){
if (!e.getElementById) e=e.ownerDocument;
if ($IE) {
   return ev!=null ? ev : e.parentWindow.event;
} else {
   return ev;
   throw new Error("this method can only execute in IE");
}
}
function $addEL(n,e,l,b){

if ($IE){
   if (n["$__listener_"+e]==null){
    var lst=function (e){
    
     var f=arguments.callee;
     var ar=f.fList;
    
     e=$ge(e);
     for (var i=0;i<ar.length;i++){     
      ar[i](e);
     }
    }
    lst.fList=[];   
    n["$__listener_"+e]=lst;
    n["on"+e]=n["$__listener_"+e];


   
   }
   var fList=n["$__listener_"+e].fList;
   fList[fList.length]=l;

} else {
   n.addEventListener(e,l,b);
}
}
function $cancelEvent (e) {
if ($IE) {
   e.returnValue = false;
   e.cancelBubble = true;
} else
   e.preventDefault();
};
function $cpAttr(o,p){
for (var i in p){
   var s=p[i];
   o[i]=s;
}
return o;
}
function $getValue(v,d){
return v==null ? d : v;
}
var $gv=$getValue;


var $dom={
parseInt : function(s) {
   if (s == null || s == '' || typeof(s)=='undefined')
    return 0;

   return parseInt(s);
},
getClientSize : function(n){
   if ($IE){
    //ts("this is ie");
    var s= {x:n.clientLeft,y:n.clientTop};
    s.l=s.x;
    s.t=s.y;
    s.r=n.clientRight;
    s.b=n.clientBottom;
   
    s.w=n.clientWidth;
    s.h=n.clientHeight;
   
    //tr("calculated client size");
   
    return s;
   } else {
    var t=n.style;
    if (t.borderLeftWidth.length==0 || t.borderTopWidth.length==0 || t.borderRightWidth.length==0 || t.borderBottomWidth.length==0){
    
     var l=n.offsetWidth;
     t.borderLeftWidth="0px";
     l-=n.offsetWidth;


    
     var r=n.offsetWidth;
     t.borderRightWidth="0px";
     r-=n.offsetWidth;
    
     var o=n.offsetHeight;
     t.borderTopWidth="0px";
     o-=n.offsetHeight;
    
     var b=n.offsetHeight;
     t.borderBottomWidth="0px";
     b-=n.offsetHeight;
    
     t.borderLeftWidth=l+"px";
     t.borderTopWidth=o+"px";
     t.borderRightWidth=r+"px";
     t.borderBottomWidth=b+"px";
    
     var s={l:l,r:r,t:o,b:b,x:l,y:o};
    
     
     return s;
    } else {
     var s= {
       x: this.parseInt(n.style.borderLeftWidth),
       y: this.parseInt(n.style.borderTopWidth),
       r: this.parseInt(n.style.borderRightWidth),
       b: this.parseInt(n.style.borderBottomWidth)
      };
     s.l=s.x;
     s.t=s.y;
     return s;
    }
   }
},


getSize : function (n,withMargin){
   var c={
    x : n.offsetWidth != null ? n.offsetWidth : 0,
    y : n.offsetHeight != null ? n.offsetHeight : 0
   };

   //c.x=this.parseInt(c.x);
   //c.y=this.parseInt(c.y);
  

   //tr("get size for : "+n.id);
   //tra(c);
   if (withMargin) {
    var m=this.getMargin(n);
    c.x+=m.l+m.r;
    c.y+=m.t+m.b;
   }
   //tra(m);
   //tr("get size for : "+n.id);
   //tra(c);
   return c; 
},

setSize : function(elmt,x,y,withMargin){
   //tf("$dom::setSize");
   //if (elmt==undefined || elmt.style.display=="none") return;
   if ($IE){
    if (withMargin){    
     var m=this.getMargin(elmt);
     x-=m.l+m.r;
     y-=m.t+m.b;    
    }   
    elmt.style.width=x;   
    elmt.style.height=y;    
   } else {
    var clientSize=this.getClientSize(elmt);
    var dx=clientSize.l+clientSize.r;
   
    var dy=clientSize.t+clientSize.b;
   
    elmt.style.width=x-dx+"px";
    elmt.style.height=y-dy+"px";
   }
},

/**
* get the context position relative to its parent.
*/
getPosition : function (elmt,withMargin){
   var c;

   c={
    x:elmt.offsetLeft,
    y:elmt.offsetTop
   };
   //c.x=this.parseInt(c.x);
   //c.y=this.parseInt(c.y);
   if (withMargin){
    var m=this.getMargin(elmt);
    c.x-=m.l;
    c.y-=m.t;
   }

   return c;
},
setPosition : function (elmt,x,y,withMargin){


   //tf("$dom::setPosition");
   if (withMargin){
    //var m=this.getMargin(elmt);
    //x-=m.l;
    //y-=m.t;
   } 
   elmt.style.left=x+"px";
   elmt.style.top=y+"px";
},


setAlpha : function (n,a){
   return;
   n.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+a*100+");";
   n.style.opacity = a;
   n.style.MozOpacity = a;
}

}
var $motion={
smooth : function (s, e, t){
   if (t>1) t=1;
   return (e - s) * t + s;
}
}

function PopUp(id, config){
this.id=id;

var c = this.config = config;
c.width = $gv(c.width,300);
c.height = $gv(c.height,200);
c.bottom = $gv(c.bottom,0);
c.right = $gv(c.right,20);
c.display = $gv(c.display,true);
c.contentUrl= $gv(c.contentUrl,"");
c.motionFunc= $gv(c.motionFunc,$motion.smooth);
c.position = {x:0,y:0};

var t=c.time;
t.slideIn = $gv(t.slideIn,10);
t.hold   = $gv(t.hold,10);
t.slideOut = $gv(t.slideOut,10);

t.slideIn *= 1000;
t.hold   *= 1000;
t.slideOut *= 1000;

this.container = document.body;
this.popup = null;
this.content = null;
this.switchButton = null;

this.moveTargetPosition = 0;
this.startMoveTime = null;
this.startPosition = null;


this.status = PopUp.STOP;
this.intervalHandle = null;

this.mm = "max";

this.imgMin = "../Images/min.gif";
this.imgMax = "../Images/max.gif";
}

//static members
PopUp.STOP = 0;
PopUp.MOVE_DOWN = 1;
PopUp.MOVE_UP = 2;
PopUp.SWITCH_TO_MIN = PopUp.MOVE_DOWN | 4;
PopUp.SWITCH_TO_MAX = PopUp.MOVE_UP | 8;


var __o={
create : function (){

   var doc=document;
   var c=this.config; 

   //create popup holder & config it.
   var p = this.popup = doc.createElement("div");
   this.container.appendChild(p);

   p.id=this.id;
   p.style.cssText="position:absolute;\
       z-index:9000;\
       overflow:hidden;\
       border:0px solid #f00;\
       ";
   $dom.setSize(p, c.width, c.height);



   //create popup content holder & config it.
   var t = this.content = doc.createElement("div");
   p.appendChild(t);

   t.id = this.id+"_content"; 
   t.style.cssText="position:absolute;\
       z-index:1;\
       overflow:hidden;";
   $dom.setSize(t, c.width, c.height);
   $dom.setPosition(t,0,0);//add

   c.position.y = c.height;//add
   this.onresize();//add
   //$dom.setPosition(t, 0, c.height);//hide it at first



   // create content holder's content.
   // a close button & an iframe for loading external content.
   //t.innerHTML = "<a id='closeButton' href='#'></a>"+
   //       "<a id='switchButton' href='#'></a>"+
   //        "<iframe id='"+this.id+"_content_iframe' src="+c.contentUrl+" frameborder=0 scrolling=no width='100%' height='100%' style='height:100%'></iframe>";
   t.innerHTML = "<a id='closeButton' href='#'></a>" +
          "<a id='switchButton' href='#'></a><div>" + document.getElementById('divContent').innerHTML + "</div>";


   var sBtn = this.switchButton = $_t(t,'a',"switchButton");
   sBtn.style.cssText='position:absolute;\
        z-index:2;\
        \
        font-size:0px;\
        line-height:0px;\
        \
        left:220px;\
        top:6px;\
        width:15px;\
        height:15px;\
        \
        background-image:url("../Images/min.gif");';

   $addEL(sBtn,"click",$dele(this,"switchMode"),true);
   $addEL(sBtn,"click",$cancelEvent,true); 


   var btn = $_t(t,'a',"closeButton");
   btn.style.cssText='position:absolute;\
        z-index:2;\
        \
        font-size:0px;\
        line-height:0px;\
        \
        left:240px;\
        top:6px;\
        width:15px;\
        height:15px;\
        \
        background-image:url("../Images/close.gif");';



   $addEL(btn,"mouseover",function (e){

           $dom.setAlpha(this,0.4);
           },true);

   $addEL(btn,"mouseout",function (e){
           $dom.setAlpha(this,1);
           },true);
           


   $addEL(btn,"click",$dele(this,"hide"),true);
   $addEL(btn,"click",$cancelEvent,true);

   var container=$IE ? document.body : document.documentElement;

   $addEL(document.body,"resize",$dele(this,"onresize"),true);

    this.__hackTimer=window.setInterval("__popup.onresize()",50);

   
   $addEL(container,"scroll",$dele(this,"onresize"),true);

   //initialize position at once.
   this.onresize();

},

show : function (){

   if (!this.config.display) return;

   this.moveTargetPosition = 0;
   this.status = PopUp.MOVE_UP;
   this.startMove();
},

hide : function (){

   this.moveTargetPosition = this.config.height;
   this.status = PopUp.MOVE_DOWN;
   this.startMove();
},

minimize : function (){
   //alert("minimize");
   this.mm = "min";
   this.moveTargetPosition = this.config.height - 28;
   this.status = PopUp.SWITCH_TO_MIN;
   this.startMove();

   var s = this.switchButton.style;


   var bg = s.backgroundImage;

   if (bg.indexOf(this.imgMin) > -1) {
    bg = bg.replace(this.imgMin,this.imgMax);
    s.backgroundImage = bg;   
   }
},

maximize : function (){
   //alert("maximize");
   if (!this.config.display) return;

   this.mm = "max";
   this.moveTargetPosition = 0;
   this.status = PopUp.SWITCH_TO_MAX;
   this.startMove();


   var s = this.switchButton.style;
   var bg = s.backgroundImage;

   if (bg.indexOf(this.imgMax) > -1) {
    bg = bg.replace(this.imgMax,this.imgMin);
    s.backgroundImage = bg;   
   }
},

delayHide : function (){  


   window.setTimeout("__popup.hide()",this.config.time.hold);
},

delayMin : function (){
   window.setTimeout("__popup.minimize()",this.config.time.hold);
},

switchMode : function (){
   //alert("switch");
   if (this.mm == "min"){
    this.maximize();
   } else {
    this.minimize();
   }
},

startMove : function (){
   this.stopMove();

   this.intervalHandle = window.setInterval("__popup.move()",100);

   this.startMoveTime = new Date().getTime();
   //this.startPosition = $dom.getPosition(this.content).y;//parseInt(this.content.style.top);
   this.startPosition = this.config.position.y;
},

stopMove : function (){
   if (this.intervalHandle != null) window.clearInterval(this.intervalHandle);

   this.intervalHandle = null;
},


move : function (){


   var t = new Date().getTime();
   t = t - this.startMoveTime;

   var total = this.status & PopUp.MOVE_UP ? 
      this.config.time.slideIn : 
      this.config.time.slideOut;

   var y = this.config.motionFunc(this.startPosition, this.moveTargetPosition, t/total);
   //this.content.style.top = y + "px";
   this.config.position.y = y;
   this.onresize();
    
   if (t >= total){
    this.onFinishMove();
   }
},

onFinishMove : function (){
   this.stopMove();
   //this.content.style.top = this.moveTargetPosition + "px";

   if (this.status == PopUp.MOVE_UP && this.config.time.hold > 0 ){

    this.delayMin();
   } else {
    if (this.__hackTimer!=null) window.clearInterval(this.__hackTimer);
   }
   this.status = PopUp.STOP;
},

onresize : function (){
   var c=this.config;
   //var t=document.documentElement;
   var t=document.body;

   var dx=t.clientWidth + t.scrollLeft;
   var dy=t.clientHeight + t.scrollTop;

   var x = dx - c.right - c.width ;
   var y = dy - c.bottom - c.height + c.position.y;


   $dom.setPosition(this.popup, x, y); 
   $dom.setSize(this.popup, c.width, c.height-c.position.y);
}
}

$cpAttr(PopUp.prototype,__o);


/*---------------------------------------*/

function readCookie(name)
{
var cookieValue = "";
var search = name + "=";
if(document.cookie.length > 0)
{ 
    offset = document.cookie.indexOf(search);
    if (offset != -1)
    { 
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = unescape(document.cookie.substring(offset, end))
    }
}
return cookieValue;
}


function writeCookie(name, value, hours)
{
var expire = "";
if(hours != null)
{
    expire = new Date((new Date()).getTime() + hours * 3600000);
    expire = "; expires=" + expire.toGMTString();
}
document.cookie = name + "=" + escape(value) + expire + ";path=/";
}

/**
* main function to config the pop-up window & run it.
* web deployer change codes here to manipulte popups performance.
* & should not change codes out of this function.
*/
function job(){

/**
* config object
*/
var cfg={
   //width & height of the popup window ,these values should be determined debpended on inner contents.
   width     : 260,
   height     : 190,

   //distance to the bottom & the right edge.
   bottom    : 2,
   right    : 19,

   //switch of displaying the popup
   display    : true,
   
   //content url
   contentUrl   : "",

   //time configuration,in seconds
   time : {
    slideIn    : 1,
    hold     : 60,
    slideOut   : 1
   }      
}

//at what time the popup should display,in hours : 0~23,
//the number after add symbol means after how many the hours to display popup for the next time. 
var displayTimeList = ["7+7"];

// the popup displays each time thie page reload or only once at the first time page loaded.
// once / eachTime
//var displayMode = "once";
var displayMode = "eachTime";

//cookie name storing the next time to display popup
var cookieName="";


/**
* --------------------- from here below, the codes should NOT be modified.
*/
var hours={};
var delays=[];
for (var i=0;i<displayTimeList.length;i++) {
   var o = displayTimeList[i];
   var ar = o.split("+");
   var t = parseInt(ar[0]);
   for (var m=0;m<ar.length-1;m++){
      ar[m]=ar[m+1];
   }   
   hours[t]=true;
   for (var j=0;j<ar.length;j++){
    hours[t + parseInt(ar[j])]=true;
   } 
}
displayTimeList=[];
for (var i in hours){
   var s = parseInt(i);
   if (isNaN(s)) continue;
   displayTimeList[displayTimeList.length]=s;
}
displayTimeList = displayTimeList.sort();
//alert(displayTimeList);


var pp = new PopUp("xp", cfg);
window.__popup=pp;
pp.create();


//display:

var n=readCookie(cookieName);

if (displayMode=="eachTime") 
   pp.show();
else {
   var tm=new Date().getTime();
   if (n==null || tm>n) {
    pp.show();
   
    //get next display time
    var hr=new Date().getHours();
    var f = 60*60*1000;
    var l = displayTimeList.concat(), len = l.length; 
    for (var i = 0; i < len; i++) l[len + i] = l[i] + 24;
    for (var i = 0; i < l.length && hr >= l[i]; i++);
   
    var dt = new Date();
    dt.setHours(l[i] > 23 ? l[i] - 24 : l[i]);
    var nextTime = dt.getTime();
    if (l[i] > 23) nextTime += f * 24 ;
   
    writeCookie(cookieName, nextTime, 24);
   }
}
}


function doit(){


if(document.readyState == 'loaded' || document.readyState == 'complete'){ 
   job();
}else{
window.setTimeout(doit,500);
   return;
   }

}
